package cc.sunni.test;

import java.util.function.Function;

/**
 * 级联表达式和柯里化
 * 柯里化:把多个参数的函数转换成只有一个参数的函数
 * 柯里化目的:函数标准化
 *
 * @author jl
 * @since 2021/1/17 13:00
 */
public class CurryDemo {

    public static void main(String[] args) {
        // 实现了x+y的效果
        Function<Integer, Function<Integer, Integer>> fun = x -> y -> x + y;
        System.out.println(fun.apply(2).apply(3));

        // 实现add(2)(3)(4)=9的效果
        Function<Integer, Function<Integer, Function<Integer, Integer>>> function = x -> y -> z -> x + y + z;
        Integer sum = function.apply(2).apply(3).apply(4);
        System.out.println(sum);

        int[] nums = {2, 3, 4};
        for (int i = 0; i < nums.length; i++) {
            if (function instanceof Function) {
                Object obj = function.apply(nums[i]);
                if (obj instanceof Function) {
                    function = (Function) obj;
                } else {
                    System.out.println("调用结束,结果:" + obj);
                }
            }
        }
    }
}
